home *** CD-ROM | disk | FTP | other *** search
AmigaBASIC Source Code | 1987-04-02 | 6.1 KB | 181 lines |
- DEFINT a-z:DEFSNG r,g,b
- DIM g(1,9,9),c(1,9,9),nh(1,5),xh(1,5),yh(1,5),dx(1,5),dy(1,5),ta(1,5),s(27,8),w1(255),w2(255)
- SCREEN 1,320,200,3,1:WINDOW 3,"",(0,0)-(311,186),16,1:WINDOW OUTPUT 3:COLOR 6,0
- FOR i=0 TO 255:w1(i)=RND*255-128:w2(i)=RND*255-128:NEXT
- RESTORE PaletteData:FOR i=0 TO 7:READ r,g,b:PALETTE i,r,g,b:NEXT
- PaletteData:
- DATA .13,0,.73,.13,0,.73,1,.73,0,.8,0,.93,.33,.87,0,.8,.2,0,.9,.9,.9,0,.73,.73
- RESTORE VoiceData:FOR i=0 TO 8:READ v%(i):NEXT
- VoiceData:
- DATA 110,0,150,0,22200,64,10,1,0
- WIDTH 40:CLS:RANDOMIZE TIMER
- FOR co=1 TO 7:CLS:LINE(1,1)-(7,7),co,BF:GET(1,1)-(8,8),s(0,co):NEXT
- CLS:LOCATE 11,14:CALL Echo("LASER STRIKE",v%()):PRINT
- gx(0)=24:gx(1)=192:gy=64
- b$=" "
- RESTORE ShipNames:FOR i=2 TO 5:READ s$(i):NEXT
- ShipNames:
- DATA Explorer,Fighter,Bomber,Mothership
- FOR i=0 TO 1
- PRINT "Player"+STR$(i+1);:INPUT p$(i):IF p$(i)="" THEN cp(i)=1:p$(i)="Computer"
- NEXT:CLS:LOCATE 7,6:COLOR 1,0:PRINT"GRID 1"SPC(15)"GRID 2"
- GOSUB DrawGrid:LOCATE 20,1:COLOR 6,0
- FOR n=5 TO 2 STEP-1:l=10-LEN(s$(n))
- PRINT SPC(1)s$(n)SPC(13+1)s$(n):NEXT
-
- DeployShips:
- d=0:FOR pp=0 TO 1:p=ABS(pp-1):ls(p)=5:FOR n=5 TO 2 STEP-1:er=1
- WHILE er=1
- LOCATE 1,1:PRINT p$(pp)
- PRINT"Deploy your "s$(n)".";
- FOR i=1 TO n:PUT(i*8+POS(0)*8,8),s(0,n),PSET:NEXT
- IF cp(pp)=0 THEN GOSUB Human :ELSE x=INT(RND*(10-n)):y=INT(RND*(10-n))
- GOSUB SelectDir
- WEND
- GOSUB ClearTop:NEXT:GOSUB DrawGrid:NEXT
- p=1:d=1:GOSUB ClearTop:PALETTE 1,0.5,0.5,0.5
- FOR i=0 TO 1:px(i)=0:py(i)=0:NEXT
-
- Mainloop:
- WHILE th(p)<14:p=ABS(p-1):pp=p:WHILE INKEY$<>"":WEND
- LOCATE 7,6:COLOR p,ABS(p-1):PRINT"GRID 1";:COLOR ABS(p-1),p:PRINT SPC(15)"GRID 2"
- LOCATE 1,1:COLOR 0,1:PRINT p$(p)
- PRINT"Position and fire laser."
- IF cp(p)=0 THEN GOSUB Human :ELSE GOSUB Computer
- GOSUB FireLaser:GOSUB PutFigure:GOSUB ClearTop
- WEND
-
- EndGame:
- COLOR 5,0:CLS:LOCATE 11,15:CALL Echo("GAME OVER",v%())
- COLOR 4:LOCATE 13,20-LEN(p$(p))/2:CALL Echo(p$(p),v%())
- LOCATE 14,9:CALL Echo("Has freed the galaxy!",v%())
- COLOR 2:LOCATE 17,12:PRINT"Play again [Y/N]"
- SAY TRANSLATE$("play again"),v%:c=1
- WHILE k$<>"Y" AND k$<>"N"
- k$=UCASE$(INKEY$):c=ABS(c-1)
- COLOR 5+c:LOCATE 11,15:PRINT"GAME OVER":FOR i=1 TO 200:NEXT
- LOCATE 11,1:PRINT b$:FOR i=1 TO 200:NEXT
- WEND
- IF k$="Y" THEN RUN
- IF k$="N" THEN CLS:END
-
- Delay:FOR i=1 TO 1500:NEXT:RETURN
-
- ClearTop:LOCATE 1,1:COLOR,d:FOR i=1 TO 5:PRINT b$:NEXT:RETURN
-
- PutFigure:PUT(x*8+gx(p),y*8+gy),s(0,co),PSET:pc=c(p,x,y):c(p,x,y)=co:RETURN
-
- DrawGrid:
- co=7:FOR y=0 TO 9:FOR x=0 TO 9:FOR p=0 TO 1:IF c(p,x,y)<>1 THEN GOSUB PutFigure
- NEXT p,x,y:RETURN
-
- CheckXY:
- IF x<0 OR x>9 THEN er=1
- IF y<0 OR y>9 THEN er=1
- RETURN
-
- FitShip:
- x1=x
- 80 x1=x1+1:IF x1<=9 THEN IF g(p,x1,y)<>1 THEN 80
- xp=x1-x:x1=x
- 90 x1=x1-1:IF x1>=0 THEN IF g(p,x1,y)<>1 THEN 90
- xn=x-x1:tx=xn+xp-1:y1=y
- 100 y1=y1+1:IF y1<=9 THEN IF g(p,x,y1)<>1 THEN 100
- yp=y1-y:y1=y
- 110 y1=y1-1:IF y1>=0 THEN IF g(p,x,y1)<>1 THEN 110
- yn=y-y1:ty=yn+yp-1:RETURN
-
- Human:
- x=px(p):y=py(p):x1=x:y1=y:co=6:GOSUB PutFigure:k$=""
- WHILE k$<>" ":k$=INKEY$
- IF k$=CHR$(30) THEN IF x1<9 THEN x1=x1+1
- IF k$=CHR$(31) THEN IF x1>0 THEN x1=x1-1
- IF k$=CHR$(28) THEN IF y1>0 THEN y1=y1-1
- IF k$=CHR$(29) THEN IF y1<9 THEN y1=y1+1
- co=pc:GOSUB PutFigure:x=x1:y=y1:co=6:GOSUB PutFigure
- WEND:px(p)=x:py(p)=y:RETURN
-
- Computer:
- h=0:FOR n=2 TO 5:IF nh(p,n)>0 AND nh(p,n)<n THEN sh=n:h=1
- NEXT:IF h=0 THEN 40
- x=xh(p,sh):y=yh(p,sh):IF nh(p,sh)>1 THEN 20
- FOR i=0 TO 3:pr(i)=0:NEXT
- 10 r=INT(RND*4):IF pr(r)=1 THEN 10
- dx(p,sh)=0:dy(p,sh)=0:er=0:pr(r)=1:GOSUB FitShip
- IF r=0 THEN dx(p,sh)=1:IF tx<sh OR xp<xn THEN er=1
- IF r=1 THEN dx(p,sh)=-1:IF tx<sh OR xn<xp THEN er=1
- IF r=2 THEN dy(p,sh)=1:IF ty<sh OR yp<yn THEN er=1
- IF r=3 THEN dy(p,sh)=-1:IF ty<sh OR yn<yp THEN er=1
- x=x+dx(p,sh):y=y+dy(p,sh)
- GOSUB CheckXY:IF er=0 THEN IF g(p,x,y)<>1 THEN 50
- x=x-dx(p,sh):y=y-dy(p,sh):GOTO 10
- 20 x=x+dx(p,sh):y=y+dy(p,sh)
- er=0:GOSUB CheckXY:IF er=1 THEN GOSUB 30:GOTO 20
- IF g(p,x,y)=1 THEN GOSUB 30:GOTO 20
- IF g(p,x,y)=0 THEN GOSUB 30
- GOTO 50
- 30 IF ta(p,sh)=0 THEN dx(p,sh)=-dx(p,sh):dy(p,sh)=-dy(p,sh):ta(p,sh)=1
- RETURN
- 40 x=INT(RND*10):y=INT(RND*10)
- IF ((x+y) AND 1)=0 THEN 40
- IF g(p,x,y)=1 THEN 40
- GOSUB FitShip:IF tx<ls(p) AND ty<ls(p) THEN 40
- 50 co=6:GOSUB PutFigure:RETURN
-
- SelectDir:
- IF g(p,x,y)<>0 THEN 70
- k$=CHR$(29+INT(RND*2))
- IF cp(pp)=0 THEN
- PRINT"Horizontal [right] or vertical [down]?"
- k$="":WHILE k$<>CHR$(30) AND k$<>CHR$(29):k$=INKEY$:WEND
- END IF:er=0
- IF k$=CHR$(30) THEN 60
- IF y+n-1>9 THEN 70
- FOR i=y TO y+n-1:IF g(p,x,i)<>0 THEN er=1
- NEXT:IF er=1 THEN 70
- y1=y:FOR y=y1 TO y1+n-1:g(p,x,y)=n:IF cp(pp)=0 THEN co=n:GOSUB PutFigure
- NEXT:RETURN
- 60 IF x+n-1>9 THEN 70
- FOR i=x TO x+n-1:IF g(p,i,y)<>0 THEN er=1
- NEXT:IF er=1 THEN 70
- x1=x:FOR x=x1 TO x1+n-1:g(p,x,y)=n:IF cp(pp)=0 THEN co=n:GOSUB PutFigure
- NEXT:RETURN
- 70 er=1:IF cp(pp)=0 THEN LOCATE 4,1:COLOR 5:PRINT"INVALID CHOICE":GOSUB Delay
- COLOR 6:co=pc:GOSUB PutFigure:GOSUB ClearTop:RETURN
-
- FireLaser:
- WAVE 0,SIN:WAVE 1,SIN:k=1
- FOR i=250 TO 1 STEP -75:k=ABS(k-1):SOUND 660,0.5,i,k
- FOR j=1 TO 500:NEXT:SOUND 0,0,0,k:FOR j=1 TO 500:NEXT:NEXT
- n=g(p,x,y)
- IF n=0 THEN PRINT"MISS!":GOSUB Delay:co=1:g(p,x,y)=1:RETURN
- IF n=1 THEN PRINT"ALREADY HIT":co=pc:GOSUB Delay:RETURN
- co=n:PRINT"DIRECT HIT!"
- WAVE 0,w1:WAVE 1,w2
- FOR i=255 TO 10 STEP-10:SOUND 100,0.1,i,0:SOUND 100,0.1,i,3:FOR j=1 TO RND*20:NEXT:NEXT
- nh(p,n)=nh(p,n)+1:th(p)=th(p)+1
- g(p,x,y)=1:PUT((10+23*p+nh(p,n))*8,(24-n)*8),s(0,n),PSET
- IF n<>nh(p,n) THEN
- xh(p,n)=x:yh(p,n)=y
- ELSE
- FOR i=2 TO 5:IF nh(p,i)=0 THEN ls(p)=i
- NEXT
- IF n<>4 THEN
- SAY TRANSLATE$(s$(n)+" deestroyed"),v%:c=1
- ELSE
- SAY TRANSLATE$("bommer deestroyed"),v%:PRINT s$(n)
- END IF
- FOR i=1 TO 10:c=ABS(c-1):COLOR n+(6-n)*c,c
- LOCATE 4,20-LEN(s$(n))/2:PRINT UCASE$(s$(n))
- LOCATE 5,15:PRINT"DESTROYED!":FOR j=1 TO 50:NEXT:NEXT
- END IF
- FOR i=1 TO 500:NEXT:RETURN
-
- SUB Echo(s$,v%(1)) STATIC
- SAY TRANSLATE$(s$),v%:PRINT s$:END SUB
-
-
-
-
-
-